const md5 = require('md5');
import axios from 'axios';
import { ElMessage } from 'element-plus';
/**
 * curl 封装
 * @param {Object} options 请求参数
 * @param {String} options.url 请求地址
 * @param {String} options.method 请求方法
 * @param {Object} options.data 请求数据
 * @param {Object} options.headers 请求头
 * @param {Object} options.query 请求参数
 * @param {String} options.responseType 响应数据类型
 */
const curl = ({
    url, // 请求地址
    method = 'post', // 请求方法
    data = {}, // 请求数据
    headers = {}, // 请求头
    query = {}, // 请求参数
    responseType = 'json', // 响应数据类型
    timeout = 30000, // 请求超时时间
    errorMessage = '网络异常' // 请求超时错误信息
}) => {
    // 接口签名处理（让接口变动态）
    const signKey = 'asdfnaofa5ef1ae64f56a14f53aef46354';
    const st = Date.now();

    const dtoHeaders = {
        ...headers,
        s_t: st,
        s_sign: md5(`${signKey}_${st}`),
    }

    if (url.indexOf('/api/proj/')>-1 && window.projKey) {
        dtoHeaders.proj_key = window.projKey
    }
    // 构造请求参数
    const ajaxStr = { 
        url,
        method,
        params: query,
        data,
        responseType,
        timeout,
        headers: dtoHeaders
    }

    return axios.request(ajaxStr).then((response) => {
        const resData = response.data || {};

        const { success } = resData;

        // 失败
        if (!success) { 
            const { code, message } = resData;
            if (code === 442) {
                ElMessage.error('请求参数异常');
            } else if (code === 445) {
                ElMessage.error("请求不合法");
            } else if (code === 446) {
                
                ElMessage.error("缺少项目必要参数");
            } else if (code === 50000) {
                ElMessage.error(message);
            } else {
                ElMessage.error(errorMessage);
            }

            console.error(message);

            return Promise.resolve({ success,code, message })
        } 

        // 成功
        const { data, metadata } = resData;
        return Promise.resolve({ success, data, metadata });
    }).catch((error) => { 
        const { message } = error;
        if (message.match(/timeout/)) {
            return Promise.resolve({
                message: '请求超时',
                code: 504
            });
        }
        return Promise.resolve(error);
    });
}

export default curl;